<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUserActivitisTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        //志愿者所参加的活动表
        //   志愿者需要唯一确定加入该活动所有举办城市中的哪一个，当然如果活动只在唯一的城市举办那就默认了
        Schema::create('user_activities', function (Blueprint $table) {
            $table->bigIncrements('id')->unsigned();

            $table->bigInteger('user_id')->unsigned()->comment('志愿者用户id');
            $table->foreign('user_id')->references('id')->on('users');

            $table->integer('activity_id')->unsigned()->comment('活动id');
            $table->foreign('activity_id')->references('id')->on('activities');

            //一个活动可以在一个城市举行，也可能同时在多个城市举行，但是志愿者加入的活动只能确定唯一的城市
            //              举例：某人是长沙人，该活动举办地也有长沙，那么一旦审核通过他的报名申请，则自动将其参与城市设为长沙
            $table->integer('city_id')->unsigned()->comment('用户参与活动的cityid');
            $table->foreign('city_id')->references('id')->on('cities');

            $table->dateTime('join_time')->nullable()->comment('加入活动时间');

            //志愿者刚加入活动时，签到状态为未签到（0），签到时间为空，只有活动正式开始之后现场签到，状态才能变为已签到（1）
            //第一阶段为手工签到，输入用户身份证号由工作人员在后台处理签到
            //后面迭代要支持二维码扫码签到，WIFI签到，GPS定位签到
            $table->tinyInteger('sign_status')->default(0)->nullable()->comment('签到状态：0=未签到，1=已签到');
            $table->dateTime('sign_time')->nullable()->comment('签到时间');

            //志愿者刚加入活动时，签退状态为未签退（0），签退时间为空，只有用户现场实际参加活动完成之后，状态才能变为已签退（1），签退后计算志愿者服务时长
            //第一阶段为手工签退，输入用户身份证号由工作人员在后台处理签退
            //后面迭代要支持二维码扫码签退，WIFI签退，GPS定位签退
            $table->tinyInteger('signout_status')->default(0)->nullable()->comment('签退状态：0=未签退，1=已签退');
            $table->dateTime('signout_time')->nullable()->comment('签退时间');

            //志愿时常默认为0，只有正常签到签退才可以有志愿时长
            //第一阶段由工作人员后台手工填入本次可以计入的志愿者时长，志愿者时长不可以超过活动定好的志愿时长
            //后面由系统自动根据志愿者的签到签退时间来计算志愿者时长
            $table->decimal('work_time', 5, 2)->default(0)->nullable()->comment('本次志愿时长');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('user_activities', function ($table) {
            $table->dropForeign(['activity_id']);
            $table->dropForeign(['user_id']);
            $table->dropForeign(['city_id']);
        });
        Schema::dropIfExists('user_activities');
    }
}
